#ifndef __EPOLL_OP__
#define __EPOLL_OP__

#include "file_op.h"
#include "db_op.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/epoll.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>


#define MAXSIZE     1024
#define LISTENQ     5
#define FDSIZE      1000
#define EPOLLEVENTS 100

#define SUCCESS 0
#define FAIL    -1

//fd私有属性
struct epollfd_priv
{
	int fd;
	int status;
};

enum _METHOD_TYPE{
	PUSH_FILE=0,
	GET_LIST,
	GET_RESULT
} METHOD_TYPE;

typedef struct{
	int length;
	int method;
	uint64_t uid;
	char fname[32];//文件名，在上传json文件的时候可以指定
}REQ_HEADER;

//函数声明
//创建套接字并进行绑定
 int socket_bind(const char* ip,int port);
//IO多路复用epoll
 void do_epoll(int listenfd);
//事件处理函数
 void
handle_events(int epollfd,struct epoll_event *events,int num,int listenfd);
//处理接收到的连接
 void handle_accpet(int epollfd,int listenfd);
//读处理
 void do_read(int epollfd,struct epollfd_priv *fd_priv);
//写处理
 void do_write(int epollfd,struct epollfd_priv *fd_priv,char *buf);
//添加事件
 void add_event(int epollfd,int fd,int state);
//修改事件
 void modify_event(int epollfd,struct epollfd_priv *fd_priv,int state);
//删除事件
 void delete_event(int epollfd,struct epollfd_priv *fd_priv,int state);

void send_to_user_cb(struct epollfd_priv *fd_priv, char *buf);
#endif